import axios from "axios";
import { ElMessage } from "element-plus";
import router from "@/router";
import store from "@/store";

// 创建axios实例
const service = axios.create({
  baseURL: "/api/api",
  timeout: 5000, // request timeout
});

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    // 从localStorage获取token
    const token = localStorage.getItem("token");
    if (token) {
      // 如果token存在，将其添加到请求头
      config.headers["Authorization"] = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    // 请求错误处理
    console.error("请求错误:", error);
    return Promise.reject(error);
  }
);

// 响应拦截器
service.interceptors.response.use(
  (response) => {
    const res = response.data;
    // 如果返回的状态码不是200，说明请求有问题
    if (res.code !== 200) {
      ElMessage({
        message: res.msg || "请求失败",
        type: "error",
        duration: 3 * 1000,
      });

      // 401: 未授权
      if (res.code === 401) {
        // 清空用户状态并跳转到登录页
        store.commit("user/CLEAR_USER");
        router.push("/login");
      }
      return Promise.reject(new Error(res.msg || "请求失败"));
    } else {
      return res;
    }
  },
  (error) => {
    console.error("响应错误:", error);
    ElMessage({
      message: error.message || "请求失败",
      type: "error",
      duration: 3 * 1000,
    });
    return Promise.reject(error);
  }
);

export default service;
